//package com.travel.travelServer.service1.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.github.pagehelper.PageHelper;
//import com.github.pagehelper.PageInfo;
//import com.travel.travelServer.entity1.*;
//import com.travel.travelServer.entity1.vo.UserVo;
//import com.travel.travelServer.mapper1.*;
//import com.travel.travelServer.service1.UserService;
//import com.travel.travelServer.utils.BaseService;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.*;
//import java.util.stream.Collectors;
//
//
///**
// * <p>
// *  User表 业务接口实现
// * </p>
// *
// * @author <>
// *
// */
//@Service
//public class UserServiceImpl extends BaseService<UserMapper, User> implements UserService {
//
//    @Autowired
//    private UserMapper userMapper;
//
//    @Autowired
//    private RoleMapper roleMapper;
//
//    @Autowired
//    private MenuMapper menuMapper;
//
//    @Autowired
//    private UserRoleMapper userRoleMapper;
//
//    @Autowired
//    private RoleMenuMapper roleMenuMapper;
//
//    /**
//     * 新增User
//     *
//     * @param UserVo
//     * @return 结果
//     */
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public int insertUser(UserVo userVo) {
//        Date date = new Date();
//        userVo.setCreatedTime(date);
//        userVo.setUpdatedTime(date);
//        userMapper.insert(userVo);
//        if (userVo.getKey().equals("reg")){
//            LambdaQueryWrapper<Role> wrapper = new LambdaQueryWrapper<>();
//            wrapper.eq(Role::getCode, "USER");
//            Role role = roleMapper.selectOne(wrapper);
//            UserRole userRole = new UserRole();
//            userRole.setUserId(userVo.getId());
//            userRole.setRoleId(role.getId());
//            userRoleMapper.insert(userRole);
//        }else {
//            List<Long> roleIds = userVo.getRoleIds();
//            if (roleIds.size() > 0){
//                for (Long roleId : roleIds) {
//                    UserRole userRole = new UserRole();
//                    userRole.setUserId(userVo.getId());
//                    userRole.setRoleId(roleId);
//                    userRoleMapper.insert(userRole);
//                }
//            }
//        }
//        return 1;
//    }
//
//    /**
//     * 单个删除User信息
//     *
//     * @param id-主键
//     * @return 结果
//     */
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public int deleteById(Long id) {
//        userMapper.deleteById(id);
//        LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(UserRole::getUserId, id);
//        return userRoleMapper.delete(wrapper);
//    }
//
//    /**
//     * 批量删除User信息
//     *
//     * @param ids-主键[]
//     * @return 结果
//     */
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public int deleteByIds(Long[] ids) {
//        userMapper.deleteBatchIds(Arrays.asList(ids));
//        for (Long id : ids) {
//            userMapper.deleteById(id);
//            LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
//            wrapper.eq(UserRole::getUserId, id);
//            userRoleMapper.delete(wrapper);
//        }
//        return 1;
//    }
//
//    /**
//     * 修改User
//     *
//     * @param UserVo
//     * @return 结果
//     */
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public int updateUser(UserVo userVo) {
//        userMapper.updateById(userVo);
////        if (userVo.getRoleIds().size() > 0){
////            LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
////            wrapper.eq(UserRole::getUserId, userVo.getId());
////            userRoleMapper.delete(wrapper);
////            for (Long roleId : userVo.getRoleIds()) {
////                UserRole userRole = new UserRole();
////                userRole.setUserId(userVo.getId());
////                userRole.setRoleId(roleId);
////                userRoleMapper.insert(userRole);
////            }
////        }
//        return 1;
//    }
//
//    /**
//     * 查询User
//     *
//     * @param id-主键
//     * @return User
//     */
//    @Override
//    public UserVo selectById(Long id) {
//        UserVo userVo = new UserVo();
//        User user = userMapper.selectById(id);
//        BeanUtils.copyProperties(user, userVo);
//        LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(UserRole::getUserId, id);
//        List<UserRole> userRoles = userRoleMapper.selectList(wrapper);
//        if (userRoles.size() > 0){
//            List<Long> roleIds = userRoles.stream().map(userRole -> userRole.getRoleId()).collect(Collectors.toList());
//            List<Role> roles = roleMapper.selectBatchIds(roleIds);
//            userVo.setRoles(roles);
//        }else {
//            userVo.setRoles(new ArrayList<>());
//        }
//        return userVo;
//    }
//
//    /**
//     * 查询User列表
//     *
//     * @param UserVo
//     * @return User集合
//     */
//    @Override
//    public List<User> selectUserList(UserVo UserVo) {
//        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
//        //queryWrapper.eq(User::getId, UserVo.getId).select(User::getId);
//        return userMapper.selectList(queryWrapper);
//    }
//
//    @Override
//    public UserVo getUserDetailInfo(String username) {
//        UserVo userVo = new UserVo();
//        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(User::getUsername, username);
//        User user = userMapper.selectOne(wrapper);
//        if (Objects.isNull(user)){
//            return userVo;
//        }
//        BeanUtils.copyProperties(user, userVo);
//        LambdaQueryWrapper<UserRole> userRoleWrapper = new LambdaQueryWrapper<>();
//        userRoleWrapper.eq(UserRole::getUserId, user.getId());
//        List<UserRole> userRoles = userRoleMapper.selectList(userRoleWrapper);
//        List<Long> roleIds = userRoles.stream().map(userRole -> userRole.getRoleId()).collect(Collectors.toList());
//        List<Role> roles = roleMapper.selectBatchIds(roleIds);
//        userVo.setRoles(roles);
//        List<Menu> menus = getMenusByRoles(roleIds);
//        userVo.setMenus(menus);
//        return userVo;
//    }
//
//    @Override
//    public User selectByUsername(String username) {
//        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(User::getUsername, username);
//        return userMapper.selectOne(wrapper);
//    }
//
//    @Override
//    public PageInfo<UserVo> getInfoPage(UserVo userVo) {
//        // 使用 PageHelper 分页
//        PageHelper.startPage(userVo.getPageNum(), userVo.getPageSize());
//        List<UserVo> userVos = userMapper.selectUserList(userVo);
//        return new PageInfo<>(userVos);
//    }
//
//    @Override
//    public Boolean setRoles(UserVo userVo) {
//        List<Long> roleIds = userVo.getRoleIds();
//        LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(UserRole::getUserId, userVo.getId());
//        userRoleMapper.delete(wrapper);
//        if (roleIds.size() > 0){
//            for (Long roleId : roleIds) {
//                UserRole userRole = new UserRole();
//                userRole.setUserId(userVo.getId());
//                userRole.setRoleId(roleId);
//                userRoleMapper.insert(userRole);
//            }
//        }
//        return true;
//    }
//
//    private List<Menu> getMenusByRoles(List<Long> roleIds){
//        List<Long> menus = new ArrayList<>();
//        for (Long roleId : roleIds) {
//            LambdaQueryWrapper<RoleMenu> queryWrapper = new LambdaQueryWrapper<>();
//            queryWrapper.eq(RoleMenu::getRoleId, roleId);
//            List<RoleMenu> roleMenus = roleMenuMapper.selectList(queryWrapper);
//            List<Long> menuIds = roleMenus.stream().map(roleMenu -> roleMenu.getMenuId()).collect(Collectors.toList());
//            menus.addAll(menuIds);
//        }
//        List<Long> list = menus.stream().distinct().collect(Collectors.toList());
//        return menuMapper.selectBatchIds(list);
//    }
//}
